package com.bfd.es_demo.utils;

/**
 * ┌ ─┐  ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐     ┌───┬───┬───┬───┐         ┌───┬───┬───┐
 * │Esc│  │ F1   │ F2   │  F3  │  F4  │ │ F5   │ F6   │ F7   │ F8   │     │ F9   │ F10  │ F11  │ F12  │         │ P/S  │S L   │P/B   │                 ┌┐    ┌┐    ┌┐
 * └ ─┘  └───┴───┴───┴───┘ └───┴───┴───┴───┘     └───┴───┴───┴───┘         └───┴───┴───┘                 └┘    └┘    └┘
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
 * │~ `   │! 1   │@ 2   │# 3   │$ 4   │% 5   │^ 6   │& 7   │* 8   │( 9   │) 0   │_ -   │+ =   │  BacSp       │ │Ins   │Hom   │PUp   │ │N L   │ /    │ *    │ -    │
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
 * │ Tab     │ Q    │ W    │ E    │ R    │ T    │ Y    │ U    │ I    │ O    │ P    │{ [   │} ]   │ | \      │ │Del   │End   │PDn   │ │ 7    │ 8    │ 9    │      │
 * ├────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤  +   │
 * │ Caps    │ A    │ S    │ D    │ F    │ G    │ H    │ J    │ K    │ L    │: ;   │" '   │ Enter          │                            │ 4    │ 5    │ 6    │      │
 * ├────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤         ┌───┐         ├───┼───┼───┼───┤
 * │ Shift     │ Z    │ X    │ C    │ V    │ B    │ N    │ M    │< ,   │> .   │? /   │  Shift             │         │  ↑  │         │ 1    │ 2    │ 3    │      │
 * ├────┬┴─┬─┴──┬┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ E│  │
 * │ Ctrl  │    │Alt     │         Space                                │ Alt    │        │        │Ctrl    │ │ ←   │ ↓   │ →   │ │   0  │ .    │←  ─┘      │
 * └───┴──┴────┴───────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
 * 作者：yong.li
 * 时间:2019/11/12 11:31
 */

public class GetDistance {
    /*
    * 根据经纬度查询两点之间的距离
    * */
    public static long GetDistance(double lng1, double lat1, double lng2, double lat2)
    {
        double d1 = 0.01745329251994329D;
        double d2 = lng1;
        double d3 = lat1;
        double d4 = lng2;
        double d5 =lat2;
        d2 *= d1;
        d3 *= d1;
        d4 *= d1;
        d5 *= d1;
        double d6 = Math.sin(d2);
        double d7 = Math.sin(d3);
        double d8 = Math.cos(d2);
        double d9 = Math.cos(d3);
        double d10 = Math.sin(d4);
        double d11 = Math.sin(d5);
        double d12 = Math.cos(d4);
        double d13 = Math.cos(d5);
        double[] arrayOfDouble1 = new double[3];
        double[] arrayOfDouble2 = new double[3];
        arrayOfDouble1[0] = (d9 * d8);
        arrayOfDouble1[1] = (d9 * d6);
        arrayOfDouble1[2] = d7;
        arrayOfDouble2[0] = (d13 * d12);
        arrayOfDouble2[1] = (d13 * d10);
        arrayOfDouble2[2] = d11;
        double d14 = Math.sqrt((arrayOfDouble1[0] - arrayOfDouble2[0]) * (arrayOfDouble1[0] - arrayOfDouble2[0])
                + (arrayOfDouble1[1] - arrayOfDouble2[1]) * (arrayOfDouble1[1] - arrayOfDouble2[1])
                + (arrayOfDouble1[2] - arrayOfDouble2[2]) * (arrayOfDouble1[2] - arrayOfDouble2[2]));

        double II=  Math.floor(Math.asin(d14 / 2.0D) * 12742001.579854401D);
        return new Double(II).longValue();
    }
    public static void main(String[] args){
        long i = GetDistance(116.368904,39.923423,116.387271,39.922501);
        System.out.print(i);
    }
}
